5.0 总介

触发模块 触发器可以导致断点异常、进入调试模式或跟踪操作,而无需执行特殊指令。

这使得它们在从ROM调试代码时非常有用。它们可以在给定内存地址执行指令时触发,或者在加载/存储的地址/数据时触发。

这些特性在没有Debug模块的情况下也很有用,因此触发器模块被分解为一个单独的部分,可以单独实现。 hart可以在不实现任何触发器功能的情况下符合本规范,但如果实现了,则必须符合本节。

在调试模式下不会触发触发器。

每个触发器可能支持多种特性。

调试器可以构建所有触发器及其特性的列表,如下:

将0写入tselect。 2. 回读tselect并检查它是否包含写入的值。 如果不是,则退出循环。 3. 读tinfo。 4. 如果这导致了异常,调试器必须读取tdata1来发现类型。 (如果type为0,则该触发器不存在。 退出循环。) 5. 如果info为1,则该触发器不存在。 退出循环。 6. 否则,所选触发器支持info中发现的类型。 7. 重复,在tselect中增加值。

上面的算法读回tselect,所以有2个触发器的实现只需要实现n位的tselect。 算法检查tinfo和type,如果实现有m位tselect但少于2 m触发器。

可以同时触发一个具有“进入调试模式”动作(1)的触发器和另一个具有“抛出断点异常”动作(0)的触发器。 首选的行为是让两个动作同时发生。 两者哪个先发生取决于实现。 这确保了外部调试器的存在不会影响执行,以及用户代码设置的触发器不会影响外部调试器。 如果没有实现,则hart必须进入Debug模式并忽略断点异常。 在后一种情况下,按下触发器

必须仍然设置其action为0,以便调试器有机会处理这种情况。 当具有不同操作的触发器也被触发时,跟踪操作的情况由跟踪规范决定。